#include <stdio.h>
#include <stdbool.h>
#include <windows.h>

void Swap(int *left, int *right)
{
    int tmp = *left;
    *left = *right;
    *right = tmp;
}

void bubble_sort(int* arr, int size)
{
    //定义一个flag来记录是否有数据交换过
    bool flag = true;

    //每一趟只能将最大的数放到最后
    //因为只需要排n- 1个数 ，所以只需要排 n - 1 次
    //如果某一趟中的数为进行交换，则说明序列已经有序了
    for(int i = 0; i < size - 1 && flag; i++)
    {
        //假设序列中数据没有交换过
        flag = false; 

        //size - 1 是因为数组下标最大为size - 1
        //size - 1 - i 是因为i个元素已经排排好序了,不需要再管了
        for(int j = 0; j < size - 1 - i; j++)
        {
            if(arr[j]  > arr[j + 1]) //升序
            {
                Swap(&arr[j], &arr[j + 1]);
                flag = true;  //有数据交换
            }
            
                
        }
    }
}

void Print(int *arr, int size)
{
    for(int i = 0; i < size; i++)
    {
        printf("%d ", arr[i]);
    }
    printf("\n");
}

int main()
{
    
    int arr[10] = {9,6,8,4,2,5,7,1,3,10};
    int size = sizeof(arr) / sizeof(arr[0]);
    bubble_sort(arr, size);
    Print(arr, size);
    system("pause");
    return 0;
}